﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ModeloMagiPack.Entidades;
using DALMagiPack.Funcionalidad;

namespace BLLMagiPack.Managers
{
    public class BLLProveedor: BLLMagiPack
    {
        public void CrearProveedor(Proveedor nuevoProveedor)
        {
            DALMagiPack<Proveedor> dal = new DALMagiPack<Proveedor>();
            dal.Insertar(nuevoProveedor);
        }

        public void ModificarProveedor(Proveedor Proveedor)
        {
            DALMagiPack<Proveedor> dal = new DALMagiPack<Proveedor>();
            dal.Modificar(Proveedor);
        }

        public void EliminarProveedor(Proveedor proveedor)
        {
            List<string> elementos = new List<string>();

            if (new BLLOrdenFacturaProveedor().PoseeFacturasPorProveedor(proveedor.IdProveedor))
                elementos.Add("facturas");

            ValidarDependencia(elementos, "proveedor", proveedor.RazonSocial, true);
            DALMagiPack<Proveedor> dal = new DALMagiPack<Proveedor>();
            dal.Eliminar(proveedor);
        }

        public List<Proveedor> TraerProveedores()
        {
            DALMagiPack<Proveedor> dal = new DALMagiPack<Proveedor>();

            return dal.Traer(new Proveedor(), new List<Filtro>());
        }

        public List<Proveedor> TraerProveedores(string nombre)
        {
            DALMagiPack<Proveedor> dal = new DALMagiPack<Proveedor>();
            Proveedor parametrosFiltro = new Proveedor();
            List<Filtro> filtros = new List<Filtro>();

            if (nombre.Length > 0)
            {
                parametrosFiltro.RazonSocial = nombre;
                filtros.Add(new Filtro() { Columna = NombresColumnas.RazonSocial, Tipo = TipoFiltro.Like });
            }

            return dal.Traer(parametrosFiltro, filtros);
        }

        public List<Proveedor> TraerProveedoresPorLocalidad(int idLocalidad)
        {
            DALMagiPack<Proveedor> dal = new DALMagiPack<Proveedor>();
            Proveedor parámetros = new Proveedor() { IdLocalidad = idLocalidad };
            List<Filtro> filtros = new List<Filtro>() { new Filtro() { Columna = NombresColumnas.IdLocalidad, Tipo = TipoFiltro.Equal } };

            return dal.Traer(parámetros, filtros);
        }

        public Proveedor TraerProveedorPorFactura(int idFactura)
        {
            DALMagiPack<OrdenFacturaProveedor> dalOrdenFacturaProveedor = new DALMagiPack<OrdenFacturaProveedor>();
            OrdenFacturaProveedor asignacion = dalOrdenFacturaProveedor.Traer(new OrdenFacturaProveedor() { IdFactura = idFactura }, new List<Filtro>() { new Filtro() { Columna= NombresColumnas.IdFactura, Tipo = TipoFiltro.Equal } }).FirstOrDefault();

            if (asignacion == null)
                return null;

            return TraerProveedor(asignacion.IdProveedor);
        }

        public Proveedor TraerProveedor(int idProveedor)
        {
            DALMagiPack<Proveedor> dal = new DALMagiPack<Proveedor>();
            Proveedor parametrosFiltro = new Proveedor() { IdProveedor = idProveedor };
            List<Filtro> opciones = new List<Filtro>() { new Filtro() { Columna = NombresColumnas.IdProveedor, Tipo = TipoFiltro.Equal } };

            return dal.Traer(parametrosFiltro, opciones).FirstOrDefault();
        }
    }
}
